[Spring-4] Spring에서 Log를 작성하는법
📃

[Spring-4] Spring에서 Log를 작성하는법

Lecture
Framework
태그
log
spring
dev
public
완성
Y
생성일
Mar 17, 2024 12:28 PM
LectureName
Spring

1. 로깅

무언가를 기록하는 과정이다. 스프링에서는 로깅 라이브러리가 존재한다. System.out.print같은 경우에는 정말 느리기 때문에 따로 로깅 라이브러리를 사용해야만 한다.
 
 

2. 로깅 설정 방법

  • SLF4J
  • Logback
등등 여러 라이브러리가 있는데 SLF4J 라이브러리의 경우 이 모든 로그를 통합해서 인터페이스로 제공한다.
 
로그 선언
  1. 그냥 선언
package hello.springmvc.basic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class LogTestController { //org slf4j.loggr private final Logger logger = LoggerFactory.getLogger(getClass()); @RequestMapping("/log-test") public String logTest(){ String name = "Spring"; //System.out.println("name +" + name); logger.info("log = {}", name); return "hi"; //view 이름이 반환되어야 하지만 Rest같은 경우에는 그냥 String이 반환된다. } }
  • 현재 RestController로 설정했는데 이건 return type이 String일 경우 그냥 HTTP Body에 String을 넘겨준다.
  • 그냥 Controller같은 경우에는 view 페이지를 찾는다.
 
  1. lombok을 사용한 로거 생성
package hello.springmvc.basic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class LogTestController { //org slf4j.loggr //private final Logger logger = LoggerFactory.getLogger(getClass()); @RequestMapping("/log-test") public String logTest(){ String name = "Spring"; //System.out.println("name +" + name); logger.info("log = {}", name); return "hi"; //view 이름이 반환되어야 하지만 Rest같은 경우에는 그냥 String이 반환된다. } }
  • @Slf4j를 넣으면 자동으로 롬복이 로거를 가져온다.
  • log.info() 형태로 log. 으로 작성하면 된다.
 
 
결과
notion image
 
 

3. 다양한 로그 선언

기능
package hello.springmvc.basic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @Slf4j public class LogTestController { //org slf4j.loggr @RequestMapping("/log-test") public String logTest(){ String name = "Spring"; //System.out.println("name +" + name); log.trace("trace log={}", name); log.debug("debug log={}", name); log.info("info log={}", name); log.warn("warn log={}", name); log.error("error log={}", name); return "hi"; //view 이름이 반환되어야 하지만 Rest같은 경우에는 그냥 String이 반환된다. } }
  • trace: 디버깅에 유용한 상세한 정보를 로그에 남깁니다. 프로그램 실행에 영향을 주지 않습니다.
  • debug: 디버깅 정보를 로그에 남깁니다. 프로그램 실행에 영향을 주지 않습니다.
  • info: 정보성 로그를 남깁니다. 프로그램이 실행하는 중요한 이벤트를 알립니다.
  • warn: 경고성 로그를 남깁니다. 프로그램이 실행하는 중 오류가 발생하지 않았지만 발생할 가능성이 있습니다.
  • error: 오류 정보를 로그에 남깁니다. 프로그램이 실행하는 중 오류가 발생했음을 알립니다.
 
💡
개발 서버는 debug, 운영서버는 info 레벨을 사용한다.
  • 기본은 info이다.
 
결과
notion image
 
 

4. 모든 로그 보기

notion image
  • application.properties를 설정해 주면 된다.
  • logging level에서 패키지를 선언해주면 지정 범위를 설정할 수 있다.
 
 
💡
주의사항
  • 로깅을 사용할 떄는 JAVA 에서 제공하는 + 연산자를 사용하면 안된다.
  • format 형식으로 (”로그 메세지{}” , 들어갈 데이터) 형태로 들어가야 한다.
  • ( “logger” + 변수 명) 형태로 작성하면 JAVA에서 변수를 다시 String으로 변환하고 메모리에 작성하기 때문에 리소스가 로그가 찍힐 때마다 추가적으로 사용된다.